package edu.proyecto.logical;

import edu.proyecto.app.DB_Benedicto;
import edu.proyecto.poo.*;
import java.util.*;

public class ClienteDAO {
     
    //Coleccion de datos simulando la capa de acceso a Datos
    DB_Benedicto objVirtualDataBase ;
            
    public ClienteDAO(){
        objVirtualDataBase=new DB_Benedicto(); 
    }
        
    public List<Cliente> buscaClienteFiltro(Cliente objfiltro){
        List<Cliente> objLista=null;
        
        //Realizando Filtros : No optimo solo para fines de explicacion de algoritmo
        //se realiza la búsqueda por nombres,apellido paterno,materno,e‐mail,dni(*),
        //teléfono o fecha de contacto
            boolean lbool_nombre=false;
            boolean lbool_ape_pat=false;
            boolean lbool_ape_mat=false;
            boolean lbool_dni=false;
            boolean lbool_email=false;
            boolean lbool_fecha=false;
            
        for(Cliente objCliente : objVirtualDataBase.getObjListaCliente()){
           
            //Uso de un algoritmo antiguo de busqueda utilizando operadores
            // OR de cortocircuito , ahora se utilizaria Collection.sort(List<Cliente>,Comparer<T>)
                lbool_nombre=false;
                lbool_ape_pat=false;
                lbool_ape_mat=false;
                lbool_dni=false;
                lbool_email=false;
                lbool_fecha=false;
            
            if (objfiltro.getNombre() != null)
                    if(objCliente.getNombre().equals(objfiltro.getNombre()))
                            lbool_nombre=true;
             
            if (objfiltro.getApellido_paterno() != null)
                    if(objCliente.getApellido_paterno().equals(objfiltro.getApellido_paterno()))
                            lbool_ape_pat=true;
                        
            if (objfiltro.getApellido_materno() != null)
                    if(objCliente.getApellido_materno().equals(objfiltro.getApellido_materno()))
                            lbool_ape_mat=true;
            
            if (objfiltro.getDoi() != null)
                    if(objCliente.getDoi().equals(objfiltro.getDoi()))
                            lbool_dni=true;
            
            if (objfiltro.getEmail() != null)
                    if(objCliente.getEmail().equals(objfiltro.getEmail()))
                            lbool_email=true;
            
            if (objfiltro.getfecha_pase() != null)
                    if(objCliente.getfecha_pase().compareTo(objfiltro.getfecha_pase())==0)
                            lbool_fecha=true;
                 
            if((lbool_nombre || lbool_ape_pat ||  lbool_ape_mat ||  lbool_dni || lbool_email || lbool_fecha )==true){
                if (objLista==null)
                    objLista=new ArrayList<Cliente>();
                objLista.add(objCliente);
            }
        }
        
        return objLista;
    }
    
}
